/**
 * Created with JetBrains PhpStorm.
 * User: xx
 * Date: 14-7-17
 * Time: 下午5:09
 * To change this template use File | Settings | File Templates.
 */
(function (xxWlist, $, undefined) {
    /**
     * 初始化
     * @param options
     */
    xxWlist.init = function (options) {
        defaults = $.extend({}, defaults, options);

        db.$title = $("#" + defaults.title_id); //网站logo区ID
        db.$windows = $("#" + defaults.windows_id); //当前打开窗口的title显示区ID
        db.$wlist = $("#" + defaults.wlist_id); //当前打开窗口列表显示区ID
        db.$center = $("#" + defaults.centerId); //中间区的jquery对象

        _initAction(); //初始化事件
    };

    xxWlist.changeMode = function (menuMode) {
        status.menuMode = menuMode;
        _changeMode();
    };

    /**
     * 关闭wlist窗口
     */
    xxWlist.closeWlist = function () {
        _closeWlist();
    };

    /**
     * 选中
     * 自动增加node到wlist
     * @param node
     */
    xxWlist.select = function (node) {
        _addWindow(node);
        _openWindow(node.code);
        _reCreateHtml();
    };

    xxWlist.addWinFun = function (code, funOption, funHelp) {
        if (typeof db.list[code] == "object") {
            db.list[code].funOption = funOption;
            db.list[code].funHelp = funHelp;
        }
    };

    xxWlist.doFunOption = function () {
        if (status.curentWindow && status.curentWindow.funOption) {
            status.curentWindow.funOption();
        }
    }

    xxWlist.doFunHelp = function () {
        if (status.curentWindow && status.curentWindow.funHelp) {
            status.curentWindow.funHelp();
        }
    }

    /**
     * 关闭打开的wlist
     * @private
     */
    var _closeWlist = function () {
        if (status.wlistStatus) { //如果窗口列表为显示状态，则关闭
            db.$wlist.hide();
            if (status.menuMode == "folded") {
                //如果菜单为收起状态，要调整center
                db.$center.css("margin-left", (defaults.minWidth + 1) + "px");
            }
        }
        status.wlistStatus = false; //关闭状态
    };

    var _changeMode = function () {
        if (status.menuMode == "folded") { //当前为打开状态，收起菜单
            db.$title.width(defaults.minWidth + 2);//网站标题收缩
            db.$wlist.css("left", (defaults.minWidth + 2) + "px");
        } else if (status.menuMode == "open") {
            db.$title.width(defaults.width + 2);//网站标题打开
            db.$wlist.css("left", (defaults.width + 2) + "px");
        }

        _closeWlist();//关闭打开的wlist
    };
    /**
     * 初始化事件
     * 1. 单击$windows ,弹出打开窗口列表
     *
     * @private
     */
    var _initAction = function () {

        //打开、收起窗口列表
        db.$windows.click(function () {

            if (status.wlistStatus) {
                db.$wlist.hide();
                if (status.menuMode == "folded") {
                    //如果菜单为收起状态，要调整center
                    db.$center.css("margin-left", (defaults.minWidth + 1) + "px");
                }
            } else {
                if (status.menuMode == "folded") {
                    //如果菜单为收起状态，要调整center
                    db.$center.css("margin-left", (defaults.width + 2) + "px");
                }
                db.$wlist.show();
            }

            status.wlistStatus = !status.wlistStatus;
        });
    };

    var _addWindow = function (node) {
        node.$self = false; //自身的jquery对象
        node.$page = false; //打开的page页面
        node.funOption = false; //打开属性页面
        node.funHelp = false; //打开help页面

        _closeWlist(); //关闭wlist
        if (typeof db.list[node.code] != 'undefined') { //保留原来的数据值，因为这里的删除相当于是把窗口移到第一位
            node.$self = db.list[node.code].$self;
            node.$page = db.list[node.code].$page;
            node.funOption = db.list[node.code].funOption;
            node.funHelp = db.list[node.code].funHelp;

            delete db.list[node.code];
        } else {
            var $gin = $('<div class="g-in"></div>');
            db.$center.prepend($gin);

            $.get(node.href, { "code": node.code}, function (html) {
                $gin.html(html);
            });

            node.$page = $gin;
        }
        db.list[node.code] = node; //加入列表中
    };

    /**关闭一个窗口
     *
     * @param code
     * @private
     */
    var _closeWindow = function (code) {
        //如果关闭的是当前前台窗口
        if (code == status.curentWindow.code) { //当前选中项
            status.curentWindow = false; //当前窗口
            db.$windows.html(''); //window标题
        }

        if (db.list[code].$self) {
            db.list[code].$self.remove();
        }
        if (db.list[code].$page) {
            db.list[code].$page.remove();
        }
        delete db.list[code];
    }

    var _openWindow = function (code) {
        if (status.curentWindow) {
            status.curentWindow.$page.hide();
        }

        status.curentWindow = db.list[code];  //当前前台窗口
        db.$windows.html(status.curentWindow.title); //window标题
        status.curentWindow.$page.show();
    }

    var _reCreateHtml = function () {
        db.$wlist.html('');

        var length = 0;
        $.each(db.list, function (code, node) {
            length++;
            var nodeItem = $('<div class="node"></div>');
            var nodeClose = $('<div class="node_close"></div>');
            var nodeTitle = $('<div class="node_title">' + node.title + '</div>');
            nodeItem.append(nodeClose).append(nodeTitle);

            nodeClose.click(function () {
                _closeWindow(node.code);

                _reflash();
            });
            nodeItem.mouseenter(function () {
                nodeClose.show();
                nodeItem.addClass('node-hover');
            }).mouseleave(function () {
                    nodeClose.hide();
                    nodeItem.removeClass('node-hover');
                }).click(function () {
                    _openWindow(node.code);
                    _reflash();
                    defaults.fun(node); //回调外部fun
//                    _closeWlist(); //关闭wlist
                    //定时器
                    if (reflashTime) {
                        clearTimeout(reflashTime);
                        reflashTime = false;
                    }
                    reflashTime = setTimeout("xxWlist.closeWlist();", defaults.delaytime);
                });

            db.$wlist.prepend(nodeItem);
            db.list[code].$self = nodeItem; //节点自身的jquery对象


            if (code == status.curentWindow.code) { //当前选中项
                nodeItem.addClass("node-active");
            }

            if (length >= defaults.maxLength) { //只显示maxLength个
                return false; //break;
            }
        });
        if (length > 0) {
            db.$wlist.prepend('<div class="separate"></div>');
        }
    }

    /**
     *
     * @private
     */
    var _reflash = function () {
        if (status.curentWindow == false) { //当前前台窗口已关闭
            var nextCode = false;
            $.each(db.list, function (code, node) {
                nextCode = code;
            });
            if (nextCode) {
                _openWindow(nextCode);
            }
        }

        _reCreateHtml();
    }
    /************************************************************************************/
    /**
     * 默认属性
     */
    var defaults = {
        maxLength: 10, //最多只显示10个标题
        width: 168, //目录宽 170
        minWidth: 30, //小目录宽 30
        title_id: "xx_title", //网站logo区ID
        delaytime: 3000, //自动刷新定时时长30000
        windows_id: "xx_windows", //当前打开窗口的title显示区ID
        wlist_id: "xx_wlist", //当前打开窗口列表显示区ID
        centerId: "center", //中间区ID
        fun: function (node) {
        }
    }

    /**
     * 当前状态
     */
    var status = {
        curentWindow: false, //当前显示的窗口
        wlistStatus: false, // 窗口列表显示状态 true:显示 false:不显示
        menuMode: false //菜单状态 open  folded
    }

    var db = {
        $title: false,//网站logo区ID
        $windows: false,//当前打开窗口的title显示区ID
        $wlist: false,//当前打开窗口列表显示区ID
        $center: false, //中间区的jquery对象
        list: {} //wlist 链表结构
    }

    var reflashTime = false;
}
    (window.xxWlist = window.xxWlist || {}, jQuery)
    )
;
